//package xyz.xtt.exchange.vo;
//
//import java.math.BigDecimal;
//import java.util.List;
//import java.util.Objects;
//
//import org.apache.commons.lang3.StringUtils;
//import org.hibernate.validator.constraints.Length;
//import org.springframework.web.multipart.MultipartFile;
//
//import com.alibaba.fastjson.JSONObject;
//
//import cn.hutool.core.util.IdUtil;
//import io.swagger.v3.oas.annotations.media.Schema;
//import jakarta.validation.constraints.Max;
//import jakarta.validation.constraints.Min;
//import jakarta.validation.constraints.NotBlank;
//import jakarta.validation.constraints.NotNull;
//import jakarta.validation.constraints.Pattern;
//import lombok.AllArgsConstructor;
//import lombok.Builder;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//import xyz.xtt.common.objects.DozerUtil;
//import xyz.xtt.exchange.constants.AssetTypeEnum;
//import xyz.xtt.exchange.constants.ErrorMessage;
//import xyz.xtt.exchange.constants.FileTypeEnum;
//import xyz.xtt.exchange.constants.PayUnitEnum;
//import xyz.xtt.exchange.constants.ReferProtocolEnum;
//import xyz.xtt.exchange.entity.TblAsset;
//import xyz.xtt.exchange.entity.TblAssetAccount;
//import xyz.xtt.exchange.entity.TblAssetEntitlement;
//import xyz.xtt.exchange.entity.TblAssetExt;
//import xyz.xtt.exchange.entity.TblAssetStaticResource;
//import xyz.xtt.exchange.enums.ShowStateEnum;
//import xyz.xtt.exchange.exception.ChainException;
//
//@AllArgsConstructor
//@NoArgsConstructor
//@Builder
//@Data
//public class MintRequestV2Vo {
//	@NotBlank(message = "nft名称为必填项")
//	@Schema(description = "名称")
//	@Length(max = 30, message = "名称超过最大长度")
//	private String assetName;
//
//	@Min(value = 1, message = "数量下限为1")
//	@Schema(description = "数量")
//	private Integer amount;
//
//	@Min(value = 0, message = "价格下限为0")
//	@Max(value = 999, message = "价格上限为999")
//	@Schema(description = "价格")
//	private BigDecimal price;
//
//	@Schema(description = "描述")
//	@NotBlank(message = "描述为必填项")
//	@Length(max = 255, message = "描述超过最大长度")
//	private String description;
//
//	@Schema(description = "NFT展示图")
//	private String displayUri;
//
//	@Builder.Default
//	private int type = AssetTypeEnum.INTEREST.code();
//
//	@Schema(description = "媒体类型0图片")
//	@NotNull(message = "媒体类型0图片")
//	private Integer mediaType;
//
//	@Builder.Default
//	private Long collectionId = 0L;
//
//	@Schema(description = "权益")
//	private String entitlement;
//
//	@Schema(description = "用户")
//	@NotNull(message = "发行方用户ID")
//	private String uid;
//
//	@Schema(description = "合约类型")
//	@NotNull(message = "合约类型不能为空")
//	@Pattern(regexp = "1155", message = "合约类型：1155")
//	private String tokenType;
//
//	@Builder.Default
//	private MultipartFile file = null;
//
//	@Schema(description = "权益")
//	private List<TblAssetEntitlement> tblEntitlement;
//
//	@Schema(description = "展示风格")
//	private int showType;
//
//	public List<TblAssetEntitlement> buildEntitlementList(Long assetId) {
//		if (tblEntitlement == null || tblEntitlement.isEmpty()) {
//			return null;
//		}
//		return tblEntitlement.stream().map(x -> {
//			x.setId(IdUtil.getSnowflakeNextId());
//			x.setAssetId(assetId);
//			return x;
//		}).toList();
//	}
//
//	public void buildEntitlementVo() {
//		if (StringUtils.isBlank(entitlement)) {
//			return;
//		}
//		List<TblAssetEntitlement> list = JSONObject.parseArray(entitlement, TblAssetEntitlement.class);
//		this.tblEntitlement = list;
//		this.entitlement = null;
//	}
//
//	/**
//	 * 校验 TblAssetEntitlement 字段
//	 * 
//	 * @param entitlement
//	 */
//	public void checkEntitlement(TblAssetEntitlement entitlement) {
//		if (StringUtils.isBlank(entitlement.getDescription())) {
//			throw new ChainException(11, "权益描述不能为空");
//		}
//
//		if (StringUtils.isBlank(entitlement.getRequirement())) {
//			throw new ChainException(11, "获取条件不能为空");
//		}
//
//		if (StringUtils.isBlank(entitlement.getRequestUrl())) {
//			throw new ChainException(11, "销兑接口不能为空");
//		}
//		if (StringUtils.isBlank(entitlement.getRequestParam())) {
//			throw new ChainException(11, "销兑接口参数不能为空");
//		}
//	}
//
//	public TblAsset buildGroundAsset(String uid, long assetId, long pid, AssetTypeEnum tokenType) {
//		TblAsset asset = DozerUtil.transfor(this, TblAsset.class);
//		asset.setFirstType(tokenType.code());
//		asset.setId(assetId);
//		asset.setParentId(pid);
//		asset.setAssetNo(IdUtil.getSnowflakeNextId());
//		asset.setGuidePrice(new BigDecimal(String.valueOf(price)));
//		asset.setAuthorId(uid);
//		asset.setCooperationId(asset.getOwnerId());
//		asset.setPopularityRate(0L);
//		asset.setGoodsId(String.valueOf(assetId));
//		asset.setFirstType(tokenType.code());
//		asset.setShowState(ShowStateEnum.DOWN.code());
//		asset.setSecondType(tokenType.code());
//		asset.setCreateDatetime(System.currentTimeMillis());
//		asset.setLastModifyDatetime(System.currentTimeMillis());
//		asset.setSellPattern(1);
//		asset.setOwnerId(uid);
//		asset.setUnit(PayUnitEnum.CASH.code());
//		asset.setCollectionId(collectionId);
//		return asset;
//	}
//
//	public TblAssetExt buildGroundAssetExt(Long assetId, Long tokenId, String chainId) {
//		return TblAssetExt
//				.builder()
//				.assetId(assetId)
//				.id(IdUtil.getSnowflakeNextId())
//				.tokenId(tokenId)
//				.chainName(" ")
//				.chainId(String.valueOf(chainId))
//				.referProtocol(tokenType)
//				.sellStartDatetime(0L)
//				.sellEndDatetime(0L)
//				.lastModifyDatetime(System.currentTimeMillis())
//				.showType(showType)
//				.build();
//	}
//
//	public TblAssetStaticResource buildStaticResource(long assetId, FileTypeEnum fileType) {
//		return TblAssetStaticResource
//				.builder()
//				.id(IdUtil.getSnowflakeNextId())
//				.assetId(assetId)
//				.logoUri(displayUri)
//				.displayUri(displayUri)
//				.fileUri(displayUri)
//				.fileType(fileType.code())
//				.lastModifyTime(System.currentTimeMillis())
//				.build();
//	}
//
//	public TblAssetAccount buildAssetAccount(long assetId, Long userId) {
//		ReferProtocolEnum convert = ReferProtocolEnum.convert(tokenType);
//		if (Objects.isNull(convert)) {
//			throw new ChainException(ErrorMessage.UNKNOWN_ERROR);
//		}
//		// 721只能铸一个
//		if (Objects.equals(ReferProtocolEnum.ERC_7211, convert) && amount.intValue() > 1) {
//			throw new ChainException(ErrorMessage.UNKNOWN_ERROR);
//		}
//		return TblAssetAccount
//				.builder()
//				.id(IdUtil.getSnowflakeNextId())
//				.assetId(assetId)
//				.referProtocol(convert.getCode())
//				.accountNo(IdUtil.getSnowflakeNextId())
//				.ownerId(userId)
//				.amount(new BigDecimal(String.valueOf(amount)))
//				.build();
//	}
//
//	public String checkText() {
//		return String.format("%s$%s", assetName, description);
//	}
//}
